<?php

date_default_timezone_set("Asia/Shanghai");

define('ROOT', str_replace('\\', '/', __DIR__).'/');
define('TOOL', ROOT.'tool/');
include(TOOL.'Dir.php');
include(TOOL.'Parsedown.php');
include(TOOL.'Menu.php');

$srcDir = ROOT.'src/'; //源目录 str_replace('\\', '/', $v);
$disDir = ROOT.'_book/'; //编译后文件存放目录
$html = ROOT.'main.html'; //页面模板文件

//==============获取上次编译时间
$compileLog = array();
$lastCompileTimeFile = ROOT.'last_compile_time.log'; //存放了上次编译时间
if (file_exists($lastCompileTimeFile)) {
    $lastCompileTime = json_decode(file_get_contents($lastCompileTimeFile), TRUE);
} else {
    $lastCompileTime = array();
}

//==============获取html模板, 把编译后的html嵌套到里边, 组装成完整的html页面
$tplHtml = file_get_contents($html);

//按顺读取src目录中的文件结构
$objDir = Dir::ini($srcDir)
    ->extension('md') //找出md结尾的文件
    ->replace($srcDir, '') //去掉目录前缀
    ->replace('.md', '') //去掉文件后缀
    ->sortFiles() //文件排序
    ->createUniqueCode();

file_put_contents($disDir.'static/file_chain.js', 'var fileChainList='.json_encode($objDir->fileChainList));

//获取菜单html字符串
$menu = Menu::getMenu($objDir->uniqueList, 'SummerPHP');

//==============编译md文件
$parser = new Parsedown(); // http://parsedown.org/
$fileList = Dir::ini($srcDir)->extension('md')->fileList; //待编译的文件

$currentTime = time();
$compiledFile = array(); //本次编译的文件
foreach ($fileList as $srcFileName) {
	
    $fileInfo = new SplFileInfo($srcFileName);
    //获取文件最新更新时间
	$srcFileModifyTime = $fileInfo->getMTime(); //修改时间
    $srcFileCreateTime = $fileInfo->getCTime(); //创建时间, 复制生成的文件其创建时间 > 修改时间
    $lastModifyTime = $srcFileCreateTime > $srcFileModifyTime ? $srcFileCreateTime : $srcFileModifyTime;
    
    // 如果上次没有编译这个文件, 或者最新修改时间大于上次编译时间就重新编译, 并记录本次编译的时间
	if ((empty($lastCompileTime[$srcFileName]) || $lastCompileTime[$srcFileName] < $lastModifyTime)) {
		$text = file_get_contents($srcFileName);
		$markdown = $parser->text($text); //编译成HTML
        
        $arrTarget = array('{sidebar}', '{markdown}', '{modify_time}');
        $arrReplace = array($menu, $markdown, date('Y-m-d H:i:s'));
        $content = str_replace($arrTarget, $arrReplace, $tplHtml); //菜单和主要内容
		
		$pathName = str_replace(array($srcDir, '.md'), array('', ''), $srcFileName);
        $hashCode = $objDir->fileHashList[$pathName];

        $disFileName = $disDir.'docs/'. $hashCode. '.html';
		file_put_contents($disFileName, $content);
		if (Menu::trimOrder($pathName) == 'index') {
            file_put_contents($disDir.'index.html', $content);
        }
		$compiledFile[] = $disFileName;
        
        $compileLog[$srcFileName] = $currentTime;
	} else {
	    $compileLog[$srcFileName] = $lastCompileTime[$srcFileName];
    }
}

//===============记录本次编译时间
file_put_contents($lastCompileTimeFile, json_encode($compileLog, JSON_UNESCAPED_UNICODE));

//==================打印本次编译的文件列表
echo "编译的文件列表: ".PHP_EOL;
print_r($compiledFile);

echo 'over~';